import { nextTick } from "../utils.js";
let queue = [];
let has = {}; // 做列表的，  列表维护存放了哪些watcher


let pending = false;
function flushSchedulerQueue() {
  for (let i = 0; i < queue.length; i++) {
    queue[i].run();
  }
  queue = [];
  has = {};
  pending = false;
}

// 要等待同步代码执行完毕后， 才执行异步逻辑
export function queueWatcher(watcher) {
  // 当前执行栈中代码执行完毕后， 会先清空微任务， 再清空红任务， 我希望尽早执行更新页面
  const id = watcher.id;
  if (has[id] == null) {
    queue.push(watcher);
    has[id] = true;

    // 开启一次更新操作， 批处理（防抖）

    if (!pending) {
      nextTick(flushSchedulerQueue, 0)
      pending = true;
    }
  }
}